<?php

namespace App\Http\Controllers\Home;

use Illuminate\Http\Request;

use App\Http\Requests;
use App\Http\Controllers\Controller;
use DB;
use Hash;
use Mail;
class LoginController extends Controller
{
    //前台注册
    public function getRegister(){
        return view('home.home.register');
    }


	/**
     *   
     *将 xml数据转换为数组格式。
     */
    static public function xml_to_array($xml){
		$reg = "/<(\w+)[^>]*>([\\x00-\\xFF]*)<\\/\\1>/";
		if(preg_match_all($reg, $xml, $matches)){
			$count = count($matches[0]);
			for($i = 0; $i < $count; $i++){
			$subxml= $matches[2][$i];
			$key = $matches[1][$i];
				if(preg_match( $reg, $subxml )){
					$arr[$key] = self::xml_to_array( $subxml );
				}else{
					$arr[$key] = $subxml;
				}
			}
		}
		return $arr;
	}
	//请求数据到短信接口，检查环境是否 开启 curl init。
	static public function Post($curlPost,$url){
			$curl = curl_init();
			curl_setopt($curl, CURLOPT_URL, $url);
			curl_setopt($curl, CURLOPT_HEADER, false);
			curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
			curl_setopt($curl, CURLOPT_NOBODY, true);
			curl_setopt($curl, CURLOPT_POST, true);
			curl_setopt($curl, CURLOPT_POSTFIELDS, $curlPost);
			$return_str = curl_exec($curl);
			curl_close($curl);
			return $return_str;
	}
    public function postPhone(){

		//短信接口地址
		$target = "http://106.ihuyi.cn/webservice/sms.php?method=Submit";
		//获取手机号
		$mobile = $_POST['mobile'];
        // var_dump($mobile);
		//生成的随机数
		session(['phone_code'=>rand(1000,9999)]);
		$mobile_code = session('phone_code');
		if(empty($mobile)){
			exit('手机号码不能为空');
		}

		$post_data = "account=C72625550&password=bb9085a02bdbdebed6ccfac19013d84f&mobile=".$mobile."&content=".rawurlencode("您的验证码是：".$mobile_code."。请不要把验证码泄露给其他人。");
		//用户名请登录用户中心->验证码、通知短信->帐户及签名设置->APIID
		//查看密码请登录用户中心->验证码、通知短信->帐户及签名设置->APIKEY
		$gets =  self::xml_to_array(self::Post($post_data, $target));

		echo $gets['SubmitResult']['msg'];
    }


    public function postPhoneinsert(Request $request){
    	
    	if(session('phone_code') != $request ->input('code')){
    		return back() -> withInput() -> with('error','验证码输入错误,请重试');
    	}else{
    		$arr = $request -> only('phone','password','repassword','id');
    		if($arr['password'] == $arr['repassword']){
    			
         	  	//格式化当前时间，作为创建时间
       			$arr['createtime'] = date('Y-m-d H:i:s',time());
       			// 给密码哈希加密
    			$arr['password'] = Hash::make($request -> input('password'));
				//随机一个50字符的token值
        		$arr['token'] = str_random(50);
                
        		// dd($arr);
        		$status = '激活';
                $username = 'EG_'.rand(10000,99999);
	    		// 插入数据库
	    		$res = DB::table('tbl_home_user') -> insert(['username'=>$username,'status'=>$status,'phone'=>$arr['phone'],'password'=>$arr['password'],'token'=>$arr['token'],'createtime'=>$arr['createtime']]);
                $vt = $arr['createtime'] = date('Y.m.d',time());
                $time = time(); //当前时间戳
                $date = date('Y',$time) + 1 . '.' . date('m.d');//一年后日期
                $vtime = date('Y.m.d',$time).'-'.$date;
	    		// 查询刚注册数据的id信息  并取出
	    		$id = DB::table('tbl_home_user') -> where('phone',$arr['phone']) -> first();
	    		// 将数据插入用户详情表 进行关联
	    		$res2 = DB::table('tbl_home_userdetails') -> insert(['uid'=>$id['id']]);
	    		if($res2){
                    // 注册成功关联红包数据表   并送10000元红包
                    $res3 = DB::table('tbl_asset') -> insert(['uid'=>$id['id'],'bonus'=>'10000','validtime'=>$date,'state'=>'可使用','surplus'=>'10000']);
	    			return redirect('/home/login/')-> with('success','注册成功');
	    		}else{
	    			return back()-> with('error','注册失败');
	    		}
	    		
    		}
    		
    	}
    	
    }




    //前台邮箱注册添加
    public function postEmailinsert(Request $Request){


        //接受并选择需要的邮箱 密码和 确认密码等值
        $s = $Request->only(['email','password','repassword']);


        //组装数组，将数据处理之后压入数组之中
        $arr['email'] = $s['email'];


        //将密码进行哈希加密
        $arr['password'] = Hash::make($s['password']);


        //设定创建时间
        $arr['createtime'] = date('Y-m-d H:i:s',time());


        //设定一个随机的token值
        $arr['token'] = str_random(50);


        // 给用户添加一个默认的用户名 (随机的有可能重复，为了好看就没有搞自增长)
        $arr['username'] = 'EG_'.rand(10000,99999);


        //将用户信息存储到数据表中
        $id = DB::table('tbl_home_user') -> insertGetId($arr);


        if($id>0){
            //点击注册成功之后 返回到注册成功待激活界面 同时发送邮件到注册邮箱
            
            //发邮件需要的三个参数  ： 发送的邮箱$arr['email']   发送id  token值
            self::email($arr['email'],$id,$arr['token']);


            // 查询刚注册数据的id信息  并取出
            $id1 = DB::table('tbl_home_user') -> where('email',$arr['email']) -> first();


            // 将数据插入用户详情表 进行关联
            DB::table('tbl_home_userdetails') -> where('uid',$id1['id']) -> insert(['uid'=>$id1['id']]);


            // 返回到 注册成功界面
            return view('/home/home/registersucess');
        }else{


             // 返回到 注册失败界面
            return view('/home/home/registererror');
        }


    }


    static public function email($email,$id,$token){
        Mail::send('home.home.email', ['id' => $id,'token' => $token,'email' => $email], function ($m) use ($email) {
            $m->to($email)->subject('E-Girl 注册邮件');
        });
    }


    //邮箱激活
    public function getActivate(Request $request){
        $s = $request -> only('id','token');
        //如果点击激活  给此用户状态更新为激活状态
        $arr['status'] = '激活';
        //如果点击激活  给此用户重新附一个token值  只允许激活一次
        $arr['token'] = str_random(50);
        $res = DB::table('tbl_home_user') -> where('id',$s['id']) -> where('token',$s['token']) -> update($arr);
        if($res){
            //激活成功跳转到 登录界面
            return view('/home/home/activatesucess');
        }else{
            //激活失败  返回邮箱界面
             return view('/home/home/activateerror');
        }
    }


    //前台登录
    public function getIndex()
    {
        return view('home.home.login');
    }
   //前台登录方法
    public function postDologin(Request $request)
    {   
        // 通过邮箱 或者电话 或者用户名 查询数据库中用户的信息
        $s = DB::table('tbl_home_user') -> where('email', $request -> input('username')) -> orWhere('phone', $request ->input('username')) -> orWhere('username', $request ->input('username')) -> first();

        //检查哈希加密中存不存在用户输入的密码
        $res = Hash::check($request -> input('password'), $s['password']);

        // 2017-02-22将用户购物车数据取出 登录的时候给存入一个session并显示
        $data = DB::table('tbl_goodscar')->where('uid',$s['id'])->lists('goodsnumber');
        $carsum = array_sum($data);
        $request->session()->forget('carsum');
        // 将后期可能需要的数据 压入session
        session(['home_username'=>$request -> input('username'),'home_userid'=>$s['id'],'homeindex_username'=>$s['username'],'carsum'=>$carsum]);
        // dd(session("username"));
        if($res){
           return redirect('/');
        }else{
            return back()->with('error','账号或密码错误');
        }
    }

    /**
     *  清空session 调回首页
     */
    public function getQuit(Request $request){
        $request->session()->forget('homeindex_username');
        $request->session()->forget('home_userid');
        $request->session()->forget('carsum');
        return redirect('/');
        // return back();
    }
}
